/**
 * 1658. 合法标识符
 * 请判断字符串 str 是不是一个合法的标识符。
 * 合法的标识符由字母（A-Z，a-z）、数字（0-9）和下划线组成，并且首字符不能为数字。
 * https://www.lintcode.com/problem/legal-identifier/description?_from=cat
 *
 * 样例
 * 样例 1：
 *
 * 输入：str= "LintCode"
 * 输出：true
 * 解释：
 * 因为 "LintCode" 由字母组成。
 * 样例 2：
 *
 * 输入：str = "123_abc"
 * 输出：false
 * 解释：
 * 虽然 "123_abc" 由字母、数字和下划线组成，但是它的首字符为数字。
 * @author jeymingwu
 * @date 2019/9/30 17:25
 */
public class L1658_Legal_Identifier {

    /**
     * @param str: The identifier need to be judged.
     * @return: Return if str is a legal identifier.
     */
    public boolean isLegalIdentifier(String str) {
        // Write your code here.
        if (str == null || str.length() == 0) {
            return false;
        }
        for (int i = 0; i < str.length(); ++i) {
            if (i == 0) {
                if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                    return false;
                }
            }
            if ((str.charAt(i) >= '0' && str.charAt(i) <= '9')
                || (str.charAt(i) >= 'a' && str.charAt(i) <= 'z')
                || (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')
                || str.charAt(i) == '_') {
                continue;
            } else {
                return false;
            }
        }
        return true;
    }
}
